package org.ccay.security.reaml;

import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;

import org.ccay.core.request.IApplicationPrincipal;
import org.ccay.security.entity.Permission;
import org.ccay.security.entity.Program;
import org.ccay.security.entity.Role;
import org.ccay.security.entity.User;

/**
 * 权限信息查询服务 为安全框架提供安全相关信息
 * @author chaowangbang
 * @since 2017年1月3日
 */
public interface ISecurityInfoProvider {
	/**
	 * 通过用户名查询用户信息含加密后密码机盐
	 * @param Principal 登录时提供的主体认证标识
	 * @return 匹配的用户或空
	 */
	User findAuthenticationInfo(User principal);

	/**
	 * 查找权限
	 * @param authorizationInfo 权限信息包装体实例
	 * @param principal principal 已认证的主体标识
	 */
	Set<Permission> findPermissions(Collection<Long> roleIds, User user,IApplicationPrincipal application);
	/**
	 * 查找范围及角色
	 * @param principal principal 已认证的主体标识
	 * @return
	 */
	Map<Program, LinkedHashSet<Role>> findProgramRoles(User user,IApplicationPrincipal application);

	
}
